#include<bits/stdc++.h>
using namespace std;
// #define int long long
int fa[100005],n,m,k;
vector<int>vec[100005];
int find(int u){
	if(fa[u]==u)return u;
	return fa[u]=find(fa[u]);
}
int fa2[100005];
int dep[100005];int cnt=0;
pair<int,int>ans[100005];
bool book[100005];
int vis[100005];
// vector<int>st;
int dfs(int u){
	book[u]=1;
	int nu;
	nu=vis[u];
	// else nu=0;
	for(int i=0;i<vec[u].size();i++){
		int v=vec[u][i];
		if(book[v])continue;
		dep[v]=dep[u]+1;
		fa2[v]=u;
		int nv=dfs(v);
		if(nv==0)continue;
		if(nu==0)nu=nv;
		else {
			ans[++cnt]={nu,nv};
			nu=0;
		}
	}
	return nu;
}
int tmp[100005],top,tmp2[100005],top2;
void prin(int u,int v){
	if(dep[u]<dep[v])swap(u,v);
	while(dep[u]!=dep[v]){
		tmp2[++top2]=u;
		u=fa2[u];
	}
	if(u!=v){
		while(u!=v){
			tmp2[++top2]=u;
			// cout<<u<<" ";
			u=fa2[u];
			tmp[++top]=v;
			v=fa2[v];
		}
	}
	cout<<top2+top+1<<" ";
	for(int i=1;i<=top2;i++)cout<<tmp2[i]<<" ";
	cout<<v<<' ';
	for(int i=top;i>=1;i--)cout<<tmp[i]<<" ";
	cout<<'\n';
	top=0;top2=0;

}



signed main(){
	freopen("travel.in","r",stdin);
	freopen("travel.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)fa[i]=i;
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		int u2=find(u),v2=find(v);
		if(u2==v2)continue;
		fa[u2]=v2;
		vec[u].push_back(v);
		vec[v].push_back(u);
	}
	for(int i=1;i<=k;i++){
		int x;
		cin>>x;
		vis[x]=x;
	}
	for(int i=1;i<=n;i++){
		if(fa[i]==i){
			// cout<<"dfs"<<i<<"\n";
			// st.clear();
			dfs(i);
		}
	}
	cout<<cnt<<"\n";
	for(int i=1;i<=cnt;i++){
		prin(ans[i].first,ans[i].second);
		// cout<<ans[i].first<<" "<<ans[i].second<<'\n';
	}
	return 0;
}